// axios 配置
import axios from 'axios';
import { Loading } from 'element-ui';
import Vue from 'vue';
import router from './router';
import store from './store';

axios.defaults.headers.post['Content-Type'] = 'multipart/form-data'
axios.defaults.withCredentials = true
axios.defaults.baseURL = 'http://192.168.2.234:8080/zycm-advert-publish/'
var loadingInstance, requestCount = 0;

function openLoading() {
    if (requestCount === 0) {
        loadingInstance = Loading.service({
            'text': "加载中...",
            'spinner': 'el-icon-loading',
            //'background': 'rgba(0, 0, 0, 0.8)',
            'background': 'rgba(255,255, 255, 0.3)',
            //'fullscreen':true,
            'target': '.el-main'
        });
    }
    requestCount++

}

function closeLoading() {
    if (requestCount <= 0) return
    requestCount--;
    if (requestCount === 0 && loadingInstance) {
        loadingInstance.close();
    }
}
//创建 axios 实例
const instance = axios.create({
    //timeout: 5000, // 请求超过5秒即超时返回错误
    headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})

instance.interceptors.request.use(
    config => {
        if (config.url != 'sysUser/backLogin') {
            config.headers['zycmToken'] = localStorage.getItem("token");
        }
        // if (store.getters.token) { // 若存在token，则每个Http Header都加上token
        // config.headers.Authorization = `token ${store.getters.token}`
        // }
        //可通过设置参数决定是否开启loading效果
        if (config.data.get("openLoading") != 0) {
            openLoading();
        }
        //过滤请求参数 为空值的直接去掉字段
        for (var param of config.data.entries()) {
            if (param[1] === "") {
                config.data.delete(param[0]);
            }
        }
        return config
    },
    err => {
        closeLoading();
        return Promise.reject(err)
    })

// http response 拦截器
instance.interceptors.response.use(
    response => {
        closeLoading();
        return response
    },
    error => {
        closeLoading();
        // if (error.response && error.response.status === 800) {
        //     window.sessionStorage.removeItem('token');
        //     router.push({ path: '/login' })
        //         // ElementUI.Message.error("访问失效，请重新登录");
        //     alert("访问失效，请重新登录");
        //     //return
        // } else if (error.response && error.response.status === 801) {
        //     //router.push({ path: '/login' })
        //     // ElementUI.Message.error("此操作无权限" + error.response.config.url);
        //     //ElementUI.MessageBox.alert("此操作无权限"+error.response.config.url);
        //     alert("此操作无权限" + error.response.config.url);
        //     //window.sessionStorage.removeItem('token');
        //     //return
        // }
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    // 返回 401 (未授权) 清除 token 并跳转到登录页面
                    store.commit('BIND_LOGOUT')
                    router.replace({
                        path: '/login',
                        query: {
                            redirect: router.currentRoute.fullPath
                        }
                    })
                    break
                case 800:
                    store.commit('访问失效，请重新登录')
                    router.replace({
                        path: '/login'
                    })
                    break
                case 801:
                    store.commit('此操作无权限')
                        // router.replace({
                        //     path: '/login'
                        // })
                    break
                default:
                    alert('服务器出错，请稍后重试！')
            }
        }
        return Promise.reject(error.response) // 返回接口返回的错误信息
    }
)
Vue.prototype.$http = instance
    // export default {
    //     // 发送验证码
    //     userVerify(data) {
    //         return instance.post('/api/verify', data)
    //     },
    //     // 注册
    //     userRegister(data) {
    //         return instance.post('/api/register', data)
    //     },
    //     // 登录
    //     userLogin(data) {
    //         return instance.post('/api/login', data)
    //     },
    //     // 获取用户列表
    //     getAllUser() {
    //         return instance.get('/api/alluser')
    //     },
    //     // 删除用户
    //     delUser(data) {
    //         return instance.post('/api/deluser', data)
    //     }
    // }
